﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Web;

namespace Vizzio.Models
{
    public class IngresoDeProducto
    {
        public int IngresoDeProductoID { get; set; }

        [Display(Name = "Codigo De Ingreso")]//Conformado por la inicial del tipo de ingreso (IngresoDeProducto=I, Inventario Inicial=II, Otros=O), Seguido del año,mes y dia como un entero
        public string CodigoDeIngresoDeProducto { get; set; }
        public string Descripcion { get; set; }
        [Display(Name = "Fecha de Ingreso")]
        [DataType(DataType.Date)]
        public DateTime Fecha { get; set; }

        [Display(Name = "Costo Total")]
        public float CostoTotal { get; set; }
        public string Concepto { get; set; } //Por Importacion,InventarioInicial,Otro
        public bool Eliminado { get; set; } 
        public string EstadoIngresoProducto { get; set; } //Creado, Recepcionado

        [Display(Name = "Fecha Recibida")]
        [DataType(DataType.Date)]
        public DateTime? FechaRecibida { get; set; }

        [NotMapped]
        public int Eliminar { get; set; } //Propiedad auxiliar utilizada al crear una IngresoDeProducto, si es -1, si es 0 se guarda no se guarda
        public virtual ICollection<ProductoEsperado> ProductosEsperados { get; set; }
        public virtual ICollection<GastosDeImportacion> GastosDeImportacion { get; set; }
        //public virtual ICollection<AporteSocio> AportesSocio{ get; set; }

        public bool sePuedeEliminar()
        {
            bool res = true;
            //if (Estado.Equals("EnTransito") && (ProductoImportados.Count > 0 || GastosDeImportaciones.Count>0))
            if (Concepto.Equals("Recepcionado"))
            {
                res = false;
            }
            return res;
        }

        public float porcentajeDeGastosDeImportacion()
        {
            if (Concepto == "Importacion")
            {
                float porcentajeDeGastoPorProducto = 0;
                float precioDeProductos = totalPrecioDeProductos();
                if (precioDeProductos > 0)
                    porcentajeDeGastoPorProducto = gastosDeImportacion() / precioDeProductos;
                return porcentajeDeGastoPorProducto;
            }
            else
                return 0;
        }
        public float gastosDeImportacion()
        {
            float totalGasto = 0;
            foreach (GastosDeImportacion gasto in GastosDeImportacion)
            {
                totalGasto = totalGasto + gasto.Costo;
            }
            return totalGasto;
        }

        public float totalPrecioDeProductos()
        {
            float totalPrecioDeproductos = 0;
            foreach (ProductoEsperado productoImportado in ProductosEsperados)
            {
                totalPrecioDeproductos = totalPrecioDeproductos + (productoImportado.CantidadEsperada * productoImportado.PrecioUnitarioDeCompra);
            }
            return totalPrecioDeproductos;
        }

        public float getCostoTotal()
        {
            return totalPrecioDeProductos() + gastosDeImportacion();
        }

        public bool gastosDeImportacionRegistrado()
        {
            if (Concepto != "Importacion")
            {
                return true;
            }
            else
            {
                if (GastosDeImportacion.Count() > 0)
                    return true;
                else
                    return false;
            }
        }
    }
}